The inspiration!

D3 visualisations by Eamonn Maguire

D3 visualisations by Eamonn Maguire

Using R code in your presentation

Example of some code

summary(mtcars)
      mpg             cyl             disp             hp             drat             wt             qsec             vs        
 Min.   :10.40   Min.   :4.000   Min.   : 71.1   Min.   : 52.0   Min.   :2.760   Min.   :1.513   Min.   :14.50   Min.   :0.0000  
 1st Qu.:15.43   1st Qu.:4.000   1st Qu.:120.8   1st Qu.: 96.5   1st Qu.:3.080   1st Qu.:2.581   1st Qu.:16.89   1st Qu.:0.0000  
 Median :19.20   Median :6.000   Median :196.3   Median :123.0   Median :3.695   Median :3.325   Median :17.71   Median :0.0000  
 Mean   :20.09   Mean   :6.188   Mean   :230.7   Mean   :146.7   Mean   :3.597   Mean   :3.217   Mean   :17.85   Mean   :0.4375  
 3rd Qu.:22.80   3rd Qu.:8.000   3rd Qu.:326.0   3rd Qu.:180.0   3rd Qu.:3.920   3rd Qu.:3.610   3rd Qu.:18.90   3rd Qu.:1.0000  
 Max.   :33.90   Max.   :8.000   Max.   :472.0   Max.   :335.0   Max.   :4.930   Max.   :5.424   Max.   :22.90   Max.   :1.0000  
       am              gear            carb      
 Min.   :0.0000   Min.   :3.000   Min.   :1.000  
 1st Qu.:0.0000   1st Qu.:3.000   1st Qu.:2.000  
 Median :0.0000   Median :4.000   Median :2.000  
 Mean   :0.4062   Mean   :3.688   Mean   :2.812  
 3rd Qu.:1.0000   3rd Qu.:4.000   3rd Qu.:4.000  
 Max.   :1.0000   Max.   :5.000   Max.   :8.000  

Inline code

So, sqrt(81)*4*pi becomes 113.0973355.

Import some data

I_jean <- read.delim("http://bit.ly/avml_ggplot2_data")
head(I_jean)

Static plots

p <- ggplot(mtcars, aes(x = factor(1), fill = factor(cyl))) + 
  geom_bar(width = 0.8, position = "dodge", colour = "black")
p

Interactive plots!

ggplotly(p)

Make more plots!

# Code from https://jofrhwld.github.io/avml2012/
# Taken as an example only under fair-use practice
# All rights reserved by the original author
p <- ggplot(I_jean, aes(x = Dur_msec, y = F1.n)) + 
  geom_point() + 
  stat_smooth(method="loess") +
  scale_x_log10(breaks = c(50, 100,200,300,400)) +
  scale_y_reverse() +
  ylab("Normalized F1") +
  xlab("Vowel duration (msec)") +
  theme_bw() +
  labs(title = "394 tokens of 'I' from one speaker")
ggplotly(p)

Making a reveal.js presentation

R Markdown with embedded R code

The source file itself

“But I hate / don’t use R…”

Other “engines” for code chunks

Language In RMarkdown Plotly available
Python Yes Yes
JavaScript Yes Yes
SQL Yes No
Bash Yes No

More: http://rmarkdown.rstudio.com/authoring_knitr_engines.html

“But I don’t want to install R and its packages…”

RStudio via Docker

RStudio via Docker

RStudio via Docker

Using RStudio in your browser

  • Caveat! Non-R engines don’t work out of the box
  • Create a directory for your project
  • Add this Dockerfile and this docker-compose.yml to the directory
  • Run $ docker-compose up -d
  • Open RStudio in your browser at localhost:8787 or 0.0.0.0:8787
  • Log in with “rstudio” as both the username and password
  • To shutdown: $ docker-compose down

Questions?

LS0tCnRpdGxlOiAiSW50ZXJhY3RpdmUsIGFubm90YXRhYmxlLCBjb2RlLWRyaXZlbiBwcmVzZW50YXRpb25zIgphdXRob3I6ICJBY2hpbnR5YSBSYW8iCmRhdGU6ICIxOSBNYXkgMjAxNyIKb3V0cHV0OgogIGh0bWxfbm90ZWJvb2s6CiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUKICAgIGZpZ19jYXB0aW9uOiB5ZXMKICAgIGhpZ2hsaWdodDogdGFuZ28KICAgIHRoZW1lOiB1bml0ZWQKICAgIHRvYzogeWVzCi0tLQoKPHNjcmlwdCBzcmM9Imh0dHBzOi8vaHlwb3RoZXMuaXMvZW1iZWQuanMiIGFzeW5jPjwvc2NyaXB0PgpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFKQpsaWJyYXJ5KHBsb3RseSkKYGBgCgojIFRoZSBpbnNwaXJhdGlvbiEKCiFbRDMgdmlzdWFsaXNhdGlvbnMgYnkgRWFtb25uIE1hZ3VpcmVdKC4uL2ltYWdlcy9kMy5naWYpCgotIFtDcmVhdGluZyBWaXN1YWxpemF0aW9ucyB3aXRoIEQzXShodHRwOi8vYW50YXJjdGljLWRlc2lnbi5jby51ay9iaW92aXMtd29ya3Nob3AxNS8pIGJ5IFtFYW1vbm4gTWFndWlyZV0oaHR0cHM6Ly9naXRodWIuY29tL2VhbW9ubm1hZykKCiMgVXNpbmcgUiBjb2RlIGluIHlvdXIgcHJlc2VudGF0aW9uCgojIyBFeGFtcGxlIG9mIHNvbWUgY29kZQoKYGBge3IgY2Fyc30Kc3VtbWFyeShtdGNhcnMpCmBgYAoKIyMgSW5saW5lIGNvZGUKClNvLCBgc3FydCg4MSkqNCpwaWAgYmVjb21lcyBgciBzcXJ0KDgxKSo0KnBpYC4KCiMjIEltcG9ydCBzb21lIGRhdGEKCmBgYHtyfQpJX2plYW4gPC0gcmVhZC5kZWxpbSgiaHR0cDovL2JpdC5seS9hdm1sX2dncGxvdDJfZGF0YSIpCmhlYWQoSV9qZWFuKQpgYGAKCi0gU291cmNlOiBbaHR0cHM6Ly9qb2ZyaHdsZC5naXRodWIuaW8vYXZtbDIwMTIvXShodHRwczovL2pvZnJod2xkLmdpdGh1Yi5pby9hdm1sMjAxMi8pCgojIyBTdGF0aWMgcGxvdHMKCmBgYHtyfQoKcCA8LSBnZ3Bsb3QobXRjYXJzLCBhZXMoeCA9IGZhY3RvcigxKSwgZmlsbCA9IGZhY3RvcihjeWwpKSkgKyAKICBnZW9tX2Jhcih3aWR0aCA9IDAuOCwgcG9zaXRpb24gPSAiZG9kZ2UiLCBjb2xvdXIgPSAiYmxhY2siKQoKcApgYGAKCiMjIEludGVyYWN0aXZlIHBsb3RzIQoKYGBge3IsIHdhcm5pbmc9RkFMU0V9CmdncGxvdGx5KHApCmBgYAoKIyMgTWFrZSBtb3JlIHBsb3RzIQoKYGBge3IsIHdhcm5pbmc9RkFMU0V9CgojIENvZGUgZnJvbSBodHRwczovL2pvZnJod2xkLmdpdGh1Yi5pby9hdm1sMjAxMi8KIyBUYWtlbiBhcyBhbiBleGFtcGxlIG9ubHkgdW5kZXIgZmFpci11c2UgcHJhY3RpY2UKIyBBbGwgcmlnaHRzIHJlc2VydmVkIGJ5IHRoZSBvcmlnaW5hbCBhdXRob3IKCnAgPC0gZ2dwbG90KElfamVhbiwgYWVzKHggPSBEdXJfbXNlYywgeSA9IEYxLm4pKSArIAogIGdlb21fcG9pbnQoKSArIAogIHN0YXRfc21vb3RoKG1ldGhvZD0ibG9lc3MiKSArCiAgc2NhbGVfeF9sb2cxMChicmVha3MgPSBjKDUwLCAxMDAsMjAwLDMwMCw0MDApKSArCiAgc2NhbGVfeV9yZXZlcnNlKCkgKwogIHlsYWIoIk5vcm1hbGl6ZWQgRjEiKSArCiAgeGxhYigiVm93ZWwgZHVyYXRpb24gKG1zZWMpIikgKwogIHRoZW1lX2J3KCkgKwogIGxhYnModGl0bGUgPSAiMzk0IHRva2VucyBvZiAnSScgZnJvbSBvbmUgc3BlYWtlciIpCgpnZ3Bsb3RseShwKQpgYGAKCiMgTWFraW5nIGEgcmV2ZWFsLmpzIHByZXNlbnRhdGlvbgoKIyMgUiBNYXJrZG93biB3aXRoIGVtYmVkZGVkIFIgY29kZQoKLSBbU291cmNlXShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vUmFvT2ZQaHlzaWNzL2NvbnRhaW5lZC1yZXZlYWxyL2doLXBhZ2VzL2luZGV4LlJtZCkKLSBIb3N0ZWQgb24gR2l0SHViOiBbUmFvT2ZQaHlzaWNzL2NvbnRhaW5lZC1yZXZlYWxyXShodHRwczovL2dpdGh1Yi5jb20vUmFvT2ZQaHlzaWNzL2NvbnRhaW5lZC1yZXZlYWxyKQotIERpc3BsYXllZCB1c2luZyBbR2l0SHViIFBhZ2VzXShodHRwczovL3BhZ2VzLmdpdGh1Yi5jb20vKTogW3Jhb29mcGh5c2ljcy5naXRodWIuaW8vY29udGFpbmVkLXJldmVhbHJdKGh0dHBzOi8vcmFvb2ZwaHlzaWNzLmdpdGh1Yi5pby9jb250YWluZWQtcmV2ZWFscikKLSBBbm5vdGF0YWJsZSB1c2luZyBbSHlwb3RoZXNpc10oaHR0cHM6Ly9oeXBvdGhlcy5pcyk6CiAgICAtIEFkZCBgPHNjcmlwdCBzcmM9Imh0dHBzOi8vaHlwb3RoZXMuaXMvZW1iZWQuanMiIGFzeW5jPjwvc2NyaXB0PmAKCiMjIFRoZSBzb3VyY2UgZmlsZSBpdHNlbGYKCi0gQ3JlYXRlIGEgbmV3IGBSIE1hcmtkb3duYCBmaWxlIG5hbWVkIGBpbmRleC5SbWRgCiAgICAtIFNlbGVjdCByZXZlYWwuanMgZnJvbSB0ZW1wbGF0ZXMKLSBBZGQgW1lBTUxdKGh0dHA6Ly93d3cueWFtbC5vcmcvKSBmcm9udG1hdHRlciEKLSBJbnN0cnVjdGlvbnMgZm9yIHJldmVhbC5qcyBwcmVzZW50YXRpb25zOiBbcm1hcmtkb3duLnJzdHVkaW8uY29tL3JldmVhbGpzX3ByZXNlbnRhdGlvbl9mb3JtYXQuaHRtbF0oaHR0cDovL3JtYXJrZG93bi5yc3R1ZGlvLmNvbS9yZXZlYWxqc19wcmVzZW50YXRpb25fZm9ybWF0Lmh0bWwpCi0gQ3JlYXRlIHNlY3Rpb25zIGFuZCBhZGQgY29udGVudCtjb2RlCi0gS25pdCB5b3VyIHByZXNlbnRhdGlvbiEKCiMgIkJ1dCBJIGhhdGUgLyBkb24ndCB1c2UgUuKApiIKCiMjIE90aGVyICJlbmdpbmVzIiBmb3IgY29kZSBjaHVua3MKCnwgTGFuZ3VhZ2UgfCBJbiBSTWFya2Rvd24gfCBQbG90bHkgYXZhaWxhYmxlIHwKfC0tLS0tOnw6LS0tLS06fDotLS0tLTp8CnwgUHl0aG9uICAgICAgfCBbWWVzXShodHRwOi8vcm1hcmtkb3duLnJzdHVkaW8uY29tL2F1dGhvcmluZ19rbml0cl9lbmdpbmVzLmh0bWwjcHl0aG9uKSB8IFtZZXNdKGh0dHBzOi8vcGxvdC5seS9weXRob24vZ2V0dGluZy1zdGFydGVkLykgfAp8IEphdmFTY3JpcHQgfCBbWWVzXShodHRwOi8vcm1hcmtkb3duLnJzdHVkaW8uY29tL2F1dGhvcmluZ19rbml0cl9lbmdpbmVzLmh0bWwjamF2YXNjcmlwdCkgfCBbWWVzXShodHRwczovL3Bsb3QubHkvamF2YXNjcmlwdC9nZXR0aW5nLXN0YXJ0ZWQvKSB8CnwgU1FMIHwgW1llc10oaHR0cDovL3JtYXJrZG93bi5yc3R1ZGlvLmNvbS9hdXRob3Jpbmdfa25pdHJfZW5naW5lcy5odG1sI3NxbCkgfCBObyB8CnwgQmFzaCB8IFtZZXNdKGh0dHA6Ly9ybWFya2Rvd24ucnN0dWRpby5jb20vYXV0aG9yaW5nX2tuaXRyX2VuZ2luZXMuaHRtbCNiYXNoKSB8IE5vIHwKCk1vcmU6IGh0dHA6Ly9ybWFya2Rvd24ucnN0dWRpby5jb20vYXV0aG9yaW5nX2tuaXRyX2VuZ2luZXMuaHRtbAoKIyAiQnV0IEkgZG9uJ3Qgd2FudCB0byBpbnN0YWxsIFIgYW5kIGl0cyBwYWNrYWdlc+KApiIKCiMjIFJTdHVkaW8gdmlhIERvY2tlcgoKIVtSU3R1ZGlvIHZpYSBEb2NrZXJdKC4uL2ltYWdlcy9yc3R1ZGlvLnBuZykKCiMjIFVzaW5nIFJTdHVkaW8gaW4geW91ciBicm93c2VyCgotICoqQ2F2ZWF0ISoqIE5vbi1SIGVuZ2luZXMgZG9uJ3Qgd29yayBvdXQgb2YgdGhlIGJveAotIENyZWF0ZSBhIGRpcmVjdG9yeSBmb3IgeW91ciBwcm9qZWN0Ci0gQWRkIHRoaXMgW2BEb2NrZXJmaWxlYF0oaHR0cHM6Ly9naXRodWIuY29tL1Jhb09mUGh5c2ljcy9jb250YWluZWQtcmV2ZWFsci9ibG9iL21hc3Rlci9Eb2NrZXJmaWxlKSBhbmQgdGhpcyBbYGRvY2tlci1jb21wb3NlLnltbGBdKGh0dHBzOi8vZ2l0aHViLmNvbS9SYW9PZlBoeXNpY3MvY29udGFpbmVkLXJldmVhbHIvYmxvYi9tYXN0ZXIvZG9ja2VyLWNvbXBvc2UueW1sKSB0byB0aGUgZGlyZWN0b3J5Ci0gUnVuIGAkIGRvY2tlci1jb21wb3NlIHVwIC1kYAotIE9wZW4gUlN0dWRpbyBpbiB5b3VyIGJyb3dzZXIgYXQgYGxvY2FsaG9zdDo4Nzg3YCBvciBgMC4wLjAuMDo4Nzg3YAotIExvZyBpbiB3aXRoICJgcnN0dWRpb2AiIGFzIGJvdGggdGhlIHVzZXJuYW1lIGFuZCBwYXNzd29yZAotIFRvIHNodXRkb3duOiBgJCBkb2NrZXItY29tcG9zZSBkb3duYAoKIyBRdWVzdGlvbnM/